Функция шифрования и дешифрования для языка java совместимая с библиотекой cryptocmp.dll (C#)

public byte[] encrypt(X509Certificate cert, byte[] data, int algID){
    Number hProv = 0;
    Number hKey = 0;
    Number hKeyExp = 0;
    byte []envData = null;
    try{
        hProv = TumarCspFunctions.cpAcquireContext("", LibraryWrapper.CRYPT_VERIFYCONTEXT, LibraryWrapper.ZERO);
        hKeyExp = TumarCspFunctions.cpImportKey(hProv, cert.getEncoded(), cert.getEncoded().length, LibraryWrapper.ZERO, LibraryWrapper.ZERO);
        hKey = TumarCspFunctions.cpGenKey(hProv, algID, LibraryWrapper.CRYPT_EXPORTABLE);
        byte[] crpData = TumarCspFunctions.cpEncrypt(hProv, hKey, LibraryWrapper.ZERO, 1, LibraryWrapper.ZERO, data, data.length, data.length);
        TumarCspFunctions.cpSetKeyParam(hProv, hKey, LibraryWrapper.KP_PKCS7_DATA_SIZE, kz.gamma.core.UtilCM.intToByte(crpData.length, LibraryWrapper.SUN_CPU_ENDIAN), LibraryWrapper.ZERO);
        TumarCspFunctions.cpSetKeyParam(hProv, hKey, LibraryWrapper.KP_PKCS7_DATA, crpData, LibraryWrapper.ZERO);
        TumarCspFunctions.cpSetKeyParam(hProv, hKey, 112, "1.2.840.113549.1.7.2".getBytes(), LibraryWrapper.ZERO);
        int sz = TumarCspFunctions.cpExportKeySize(hProv, hKey, hKeyExp, LibraryWrapper.SIMPLEBLOB_P7, LibraryWrapper.CRYPT_DEFAULT_MODE);
        envData = TumarCspFunctions.cpExportKeyDataEx(hProv, hKey, LibraryWrapper.ZERO,  LibraryWrapper.SIMPLEBLOB_P7, 0, sz);
    }catch (Exception ex){
        ex.printStackTrace();
    }
    finally {
        if(hKey.longValue() != 0) TumarCspFunctions.cpDestroyKey(hProv, hKey);
        if(hKeyExp.longValue() != 0) TumarCspFunctions.cpDestroyKey(hProv, hKeyExp);
        if(hProv.longValue() != 0) TumarCspFunctions.cpReleaseContext(hProv, 0);
    }
    return envData;
}

public byte[] decrypt(String profile, byte[]encData){
    Number hProv = 0;
    Number hKey = 0;
    byte []data = null;
    try{
        hProv = TumarCspFunctions.cpAcquireContext(profile, 0, LibraryWrapper.ZERO);
        hKey = TumarCspFunctions.cpImportKey(hProv, encData, encData.length, LibraryWrapper.ZERO, LibraryWrapper.ZERO);
        byte[] lenByte = TumarCspFunctions.cpGetKeyParamData(hProv, hKey, LibraryWrapper.KP_PKCS7_DATA_SIZE, LibraryWrapper.ZERO);
        int len = UtilCM.byteToInt(lenByte, 0, LibraryWrapper.SUN_CPU_ENDIAN);
        byte[] crpData = TumarCspFunctions.cpGetKeyParamData(hProv, hKey, LibraryWrapper.KP_PKCS7_DATA, LibraryWrapper.ZERO);
        data = TumarCspFunctions.cpDecrypt(hProv, hKey, LibraryWrapper.ZERO, 1, LibraryWrapper.ZERO, crpData, crpData.length);
    }catch (Exception ex){
        ex.printStackTrace();
    }
    finally {
        if(hKey.longValue() != 0) TumarCspFunctions.cpDestroyKey(hProv, hKey);
        if(hProv.longValue() != 0) TumarCspFunctions.cpReleaseContext(hProv, 0);
    }
    return data;
}






//----------------------------------------------------------------------------
//Пример реализующий зашифровывания для нескольких получателей:

public byte[] encryptText(final byte []text, X509Certificate[] certs, final KeyStore store) throws NoSuchProviderException, KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException, UnrecoverableKeyException {
    // Формируем класс формирования шифрованного сообщения
    CMSGammaEnvelopedData data = new CMSGammaEnvelopedData();
    // Получение закрытого ключа отправителя
    String dn = "CN=Test, O=Гамма Технологии, C=KZ";
    JCEECPrivateKey prvKey = (JCEECPrivateKey) getPrivateKey(dn, store, "");
    //prvKey = new JCEECPrivateKey()
    // Получение сертификата отправителя
    X509Certificate certS = (X509Certificate) getCertificate(dn, store, "");
    // Шифрование сообщения
    data.cryptText(text, prvKey);
    // Добавление получателей сообщения
    for(int i=0;i<certs.length;i++) {
        data.addKeyRecipient(certs[i]);
    }
    // Добавление аттрибутов сообщения
    data.addUnprotectedAttrs(new Attribute((new DERObjectIdentifier("1.2.840.113549.1.9.3")), new DERSet(new DERObjectIdentifier("1.2.840.113549.1.7.3"))));
    data.addUnprotectedAttrs(new Attribute((new DERObjectIdentifier("1.2.840.113549.1.9.5")), new DERSet(new DERGeneralizedTime(new Date()))));
    data.addUnprotectedAttrs(new Attribute((new DERObjectIdentifier("1.2.840.113549.1.9.13")), new DERSet(new DERPrintableString("DESCRIPTOR"))));
    // Формирование зашифрованного сообщения
    EnvelopedData env = data.generateEnvelopedData(certS);
    return env.getEncoded();
}
